package dao;

import entity.*;

import java.util.List;

/**
 * 项目名：PAIMSys
 * 包名：dao
 * 类名：ProductDao
 * 描述：商品Dao层
 * 作者：柳胜酉
 * 开始时间：2023/4/23
 * 完成时间：
 * 版本：1.0
 */
public interface ProductDao {
    /**
     * 所有商品展示
     *
     * @return 返回所有商品数据
     */
    List<Product> showProduct();

    /**
     * 展示所有采购记录
     * @return 所有采购记录
     */
    List<Purchase> showPurchaseRecord();

    /**
     * 展示所有销售记录
     * @return 所有销售记录
     */
    List<Sell> showSellRecord();

    /**
     * 根据供应编号查商品编号
     *
     * @return 返回对应商品编号
     */
    List<Integer> selectProductIdBySupplierId(int id);

    /**
     * 展示商品供应商
     * @return 返回所有商品供应商数据
     */
    List<Supplier> showSupplier();

    /**
     * 商品库存展示
     *
     * @return 返回所有商品库存数据
     */
    List<Inventory> showInventory();

    /**
     * 商品新增
     *
     * @param product 商品实体
     * @return 返回是否注册或新增成功
     */
    boolean insertProduct(Product product);

    /**
     * 商品带图片
     *
     * @param picture 商品实体
     * @return 返回是否新增成功
     */
    boolean insertProductWithPicture(Product picture);

    /**
     * 商品修改
     *
     * @param product 商品实体
     * @return 返回是否修改成功
     */
    boolean updateProduct(Product product);

    /**
     * 商品删除
     *
     * @param id 商品编号
     * @return 返回是否删除成功
     */
    boolean deleteProduct(int id);

    /**
     * 供应商删除
     * @param id 供应商id
     * @return 返回是否删除成功
     */
    boolean deleteSupplier(int id);

    /**
     * 根据供应商名删除其在商品表中的所有相关商品
     * @param supplier 供应商尸体
     * @return 是否成功
     */
    boolean deleteProductBySupplierName(Supplier supplier);

    /**
     * 根据商品id查询商品数据
     *
     * @param id 商品编号
     * @return 商品
     */
    Product selectProductById(int id);

    /**
     * 根据商品id查询供应商id
     *
     * @param id 商品编号
     * @return 供应商id
     */
    int selectSupplierIdByProductId(int id);

    /**
     * 根据供应商id查询其供应商数据
     *
     * @param id 供应商编号
     * @return 供应商数据
     */
    Supplier selectSupplierBySupplierId(int id);

    /**
     * 商品库存修改
     *
     * @param inventory 库存实体
     * @return 返回是否修改成功
     */
    boolean updateInventory(Inventory inventory);

    /**
     * 商品供应商修改
     *
     * @param  supplier 供货商实体
     * @return 返回是否修改成功
     */
    boolean updateSupplier(Supplier supplier);

    /**
     * 添加商品和供应商对应关系
     * @param productAndSupplierRelation 对应关系实体
     * @return 是否成功
     */
    boolean insertProductAndSupplierRelation(ProductAndSupplierRelation productAndSupplierRelation);

    /**
     * 添加商品进入库存
     * @param inventory 库存实体
     * @return 是否成功
     */
    boolean insertProductInInventory (Inventory inventory);

    /**
     * 新增商品供应商
     * @param supplier 供应商实体
     * @return 是否成功
     */
    boolean insertSupplier (Supplier supplier);

    /**
     * 根据商品id查询商品库存信息
     * @param id 商品id
     * @return 商品库存信息
     */
    Inventory selectInventoryById(int id);

    /**
     * 采购单添加
     * @param purchase 采购单实体
     * @return 添加结果
     */
    boolean insertProduct_purchase(Purchase purchase);

    /**
     * 销售单添加
     * @param sell 销售单实体
     * @return 添加结果
     */
    boolean insertProduct_sell(Sell sell);

    /**
     * 删除采购记录
     * @param id 采购编号
     * @return 删除结果
     */
    boolean deletePurchaseRecord(int id);
    /**
     * 删除销售记录
     * @param id 销售编号
     * @return 删除结果
     */
    boolean deleteSellRecord(int id);
}
